<?php
/*www.w3schools.in*/
function download_start($file, $name, $mime_type='')
{

//Check the file exist or not
if(!is_readable($file)) die('File not found or inaccessible!');

$size = filesize($file);
$name = rawurldecode($name);

/* MIME type check*/
$known_mime_types=array(
  "pdf" => "application/pdf",
  "txt" => "text/plain",
  "html" => "text/html",
  "htm" => "text/html",
  "exe" => "application/octet-stream",
  "zip" => "application/zip",
  "doc" => "application/msword",
  "xls" => "application/vnd.ms-excel",
  "ppt" => "application/vnd.ms-powerpoint",
  "gif" => "image/gif",
  "png" => "image/png",
  "jpeg"=> "image/jpg",
  "jpg" =>  "image/jpg",
  "php" => "text/plain"
);

if($mime_type==''){
    $file_extension = strtolower(substr(strrchr($file,"."),1));
    if(array_key_exists($file_extension, $known_mime_types)){
     $mime_type=$known_mime_types[$file_extension];
    } else {
      $mime_type="application/force-download";
    };
};

//turn off output buffering to decrease cpu usage
@ob_end_clean(); 

// required for IE Only
if(ini_get('zlib.output_compression'))
ini_set('zlib.output_compression', 'Off'); 

header('Content-Type: ' . $mime_type);
header('Content-Disposition: attachment; filename="'.$name.'"');
header("Content-Transfer-Encoding: binary");
header('Accept-Ranges: bytes'); 
/*non-cacheable */
header("Cache-control: private");
header('Pragma: private');
header("Expires: Tue, 15 May 1984 12:00:00 GMT");

// multipart-download and download resuming support
if(isset($_SERVER['HTTP_RANGE']))
{
    list($a, $range) = explode("=",$_SERVER['HTTP_RANGE'],2);
    list($range) = explode(",",$range,2);
    list($range, $range_end) = explode("-", $range);
    $range=intval($range);
    if(!$range_end) {
   	 $range_end=$size-1;
    } else {
   	 $range_end=intval($range_end);
    }
    $new_length = $range_end-$range+1;
    header("HTTP/1.1 206 Partial Content");
    header("Content-Length: $new_length");
    header("Content-Range: bytes $range-$range_end/$size");
} else {
    $new_length=$size;
    header("Content-Length: ".$size);
}

/* Will output the file itself */
$chunksize = 1*(1024*1024); //you may want to change this
$bytes_send = 0;
if ($file = fopen($file, 'r')){
if(isset($_SERVER['HTTP_RANGE']))
fseek($file, $range);

while(!feof($file) && (!connection_aborted()) && ($bytes_send<$new_length))
{
    $buffer = fread($file, $chunksize);
    print($buffer); //echo($buffer); // can also possible
    flush();
    $bytes_send += strlen($buffer);
}
fclose($file);
} else
//If no permissiion
die('Error - can not open file.');
//die
die();
}
set_time_limit(0);
$file_path='data_arsip/'.$_REQUEST['filename'];
download_start($file_path, ''.$_REQUEST['filename'].'', 'text/plain');
?>